package com.zlm.Map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * @author 13026
 */
public class Map_interface_demo {
    /*
     * Map
     * 双列集合的顶层接口，它的功能所有双列集合都能继承使用
     *
     * V put(K key,V value)                添加元素
     * V remove(Object key)                根据指定的key删除键值对
     * void clear()                        清空双列集合
     * boolean containsKey(Object key)     判断集合是否包含指定的键
     * boolean containsValue(Object value) 判断集合是否包含指定的值
     * boolean isEmpty()                   判断集合是否为空
     * int size()                          集合的长度
     * static <K, V> Map<K, V> of()        创建不可变双列集合
     * */
    public static void main(String[] args) {
        Map<String, String> m = new HashMap<>();

        // put 细节
        // 添加--如果键不存在，直接将键值对对象添加到map集合中，方法返回null
        // 覆盖--如果键是存在的，将原有键值对对象覆盖，会把覆盖的值返回
        m.put("郭靖", "黄蓉");
        m.put("韦小宝", "沐剑屏");
        m.put("first", "1");

        System.out.println(m);

        // 删除
        m.remove("first");
        System.out.println(m);

        // 判断键存在
        boolean b = m.containsKey("韦小宝");

        // 判断值存在
        boolean b2 = m.containsKey("沐剑屏");

        // 判断是否空
        boolean b3 = m.isEmpty();

        // 集合的长度
        int s = m.size();

        // 清空
        m.clear();

        System.out.println(m);

        /*
         * 遍历方式
         * 1.键找值
         * 2.键值对
         * 3.Lambda
         * */
        Map<String, String> m2 = new HashMap<>();
        m2.put("name", "黄蓉");
        m2.put("age", "12");
        m2.put("lover", "dyq");

        // 1.键找值
        // 获取所有键的Set对象
        Set<String> keys = m2.keySet();

        // 增强for
        for (String key : keys) {
            System.out.println(key);
        }

        // Lambda
        keys.forEach(System.out::println);

        // 迭代器
        Iterator<String> iterator = keys.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        // 2.键值对
        Set<Map.Entry<String, String>> entries = m2.entrySet();

        // 增强for
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey() + entry.getValue());
        }

        // Lambda
        entries.forEach(System.out::println);

        // 迭代器
        Iterator<Map.Entry<String, String>> iterator2 = entries.iterator();
        while (iterator2.hasNext()) {
            System.out.println(iterator2.next());
        }

        // Lambda遍历
        m2.forEach((key, val) -> {
            System.out.println(key + ":" + val);
        });

        // Map.of 创建不可变双列集合
        // 最多10个键值对
        Map<Object, Object> objectObjectMap = Map.of();

        // 超过10个，Map.ofEntries
        Map<Object, Object> objectObjectMap1 = Map.ofEntries();
    }
}
